package graph.inter;

import graph.undirectedgraph.adjacencymultilist.AdjVexNode;

public interface CustGraph {
    public static final Integer MA = Integer.MAX_VALUE;

    /**
     * 创建图
     *
     * @return
     */
    void createGraph();

    /**
     * 若存在顶点u，则返回图中位置
     *
     * @param u
     * @return
     */
    int locateVex(String u);

    /**
     * 返回图中顶点v的值
     *
     * @param v
     * @return
     */
    String getVex(int v);

    /**
     * 将顶点v赋值value
     *
     * @param v
     * @param value
     */
    void putVex(int v, String value);

    /**
     * 返回顶点v的一个邻接点
     *
     * @param v
     * @return
     */
    String firstAdjVex(int v);

    /**
     * 返回顶点v相对于w的下一个邻接点
     *
     * @param v
     * @param w
     * @return
     */
    String nextAdjVex(int v, int w);

    /**
     * 添加新的顶点v
     *
     * @param v
     */
    void insertVex(String v);

    /**
     * 删除顶点v及相关的弧
     *
     * @param v
     */
    void deleteVex(String v);

    /**
     * 在图中添加弧<v,w>
     *
     * @param v
     * @param w
     */
    void insertArc(int v, int w);

    /**
     * 删除弧<v,w>
     *
     * @param v
     * @param w
     */
    void deleteArc(int v, int w);

    /**
     * 从节点v开始进行深度优先遍历
     *
     * @param v
     */
    void dfsTraverse(int v);

    /**
     * 从节点v开始进行广度优先遍历
     *
     * @param v
     */
    void bfsTraverse(int v);
}
